package com.palominocia.capa_datos_nodo.modelo.seguridad;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.jpa.activerecord.RooJpaActiveRecord;
import org.springframework.roo.addon.tostring.RooToString;

import javax.validation.constraints.NotNull;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.persistence.TypedQuery;

import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.ManyToOne;

import com.palominocia.capa_datos_nodo.modelo.opciones.Habilitacion;

import javax.persistence.Enumerated;

@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class Sesiones {

    /**
     */
    @NotNull
    private String ipAdressSesion;

    /**
     */
    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "M-")
    private Date fechaIniSesion;

    /**
     */
    @ManyToOne
    private Usuario usernameSesion;

    /**
     */
    @ManyToOne
    private TipoAcceso tipoAccesoSesion;

    /**
     */
    @NotNull
    @Column(name = "TOKEN_REFERENCIA", unique = true)
    private String tokenReferencia;

    /**
     */
    @Enumerated
    private Habilitacion SesionValida;

    @Transient
	public static Sesiones findSesionesbyToken(String tokenReferencia2) {
    	Sesiones sesion;
    	try {
    		sesion =entityManager().
    				createQuery("SELECT o FROM Sesiones o WHERE o.tokenReferencia=:tokenReferencia",Sesiones.class)
    				.setParameter("tokenReferencia", tokenReferencia2)
    				.getSingleResult();
			
		} catch (org.springframework.dao.EmptyResultDataAccessException e) {
			sesion=null;
		}
		return sesion;
	}
    @Transient
	public static List<Sesiones> findAllSesionesbyUserAccesoIp(Usuario user,
			TipoAcceso tipo, String ipAdress) {
    	List<Sesiones> sesiones;
    	try {
    		sesiones =entityManager().
    				createQuery("SELECT o FROM Sesiones o WHERE o.usernameSesion=:usuario AND o.tipoAccesoSesion=:tipoAcceso AND o.ipAdressSesion=:ipAdress",Sesiones.class)
    				.setParameter("usuario", user)
    				.setParameter("tipoAcceso", tipo)
    				.setParameter("ipAdress", ipAdress)
    				.getResultList();
			
		} catch (org.springframework.dao.EmptyResultDataAccessException e) {
			sesiones=null;
		}
		return sesiones;
	}
}
